AlteryxのPython SDKで複数ツールでの共通環境を作成する
こんにちは、小澤です。
みんな大好きAlteryxのPython SDKのお時間です。 Python SDKはAlteryxのワークフローを経由せずにPython(とHTML)のみでツールを実装するための仕組みでした。 今回は、ちょっとした応用編としてToolFamilyの話をします。
Alteryx Python SDKとvenv環境の復習
AlteryxのPython SDKでは作成したツールごとにPythonのvenv環境が作成されます。 Python SDKを使ったツールはyxiファイルにして配布することになりますが、 その際に依存ライブラリをrequirements.txtに記載し、インストール時にそれらが含まれるvenv環境が作成されます。
この仕組みの詳細は以下で解説しています。
この仕組みによって、何個ツールを入れようがそれぞれ個別の環境が構築されるため、 ツールの利用者側はライブラリの依存関係やバージョンの競合を気にすること無く好きなツールを好きなだけインストールして利用できるようになっています。
複数ツールとToolFamily
Python SDKでは、このようにすべてのツールが独立した環境を持つわけですが、 ToolFamilyという機能を使うことで、複数のツールに共通したvenv環境を作成することも可能です。
この仕組みを利用するには、ツールごとの設定のxmlファイルと、yxiに含めるConfig.xmlにて設定を行います。
ツールの設定のxmlでは以下のようにEngineSettignsタグにToolFamily属性を設定します。
<?xml version="1.0"?> <AlteryxJavaScriptPlugin> <EngineSettings EngineDllEntryPoint="<実行するPythonファイル>.py" ToolFamily="<Tool Familiyの名前>" EngineDll="Python" SDKVersion="10.1"/> <GuiSettings ...> ... </GuiSettings> <Properties> ... </Properties> </AlteryxJavaScriptPlugin>
属性値は何でもいいのですが、同一のvenv環境を利用したいツールすべてで、同じ値を設定します。
Config.xmlにも同様の設定を行います。
<?xml version="1.0"?> <AlteryxJavaScriptPlugin> <EngineSettings EngineDll="Python" ToolFamily="<Tool Familiyの名前>" SDKVersion="10.1"></EngineSettings> <Properties> <MetaInfo> ... </MetaInfo> </Properties> </AlteryxJavaScriptPlugin>
Config.xmlには、通常はEngineSettingsタグを記述していないと思いますので、それ自体を新たに追記します。 Tool Familyの名前は同じ値を設定してください。
この設定を行ったものでyxiファイルを作成してインストールすると、 %APPDATA%\Roaming\Alteryx\Tools
以下に
<Tool Familyの名前>_venv
という名前のvenv環境が作成されます(管理者権限でインストールした場合は %PROGRAMDATA%
)。
Tool Familyの名前が同じものはこの環境が利用されることになります。
requirements.txtに記載されたライブラリはすべてこのvenv環境にインストールされますので、 どれか1つのツールに一通り記載しておくなどしておくといいでしょう。
また、上記の設定から分かる通り、異なるyxiファイルに同じ値のToolFamily属性を設定することは可能ですが、 単一のyxiで複数個にまたがるような設定はできません。
ToolFamilyの使いどころ
さて、このToolFamily属性によるvenv環境はどのような場面で便利なのでしょうか?
yxiファイルでは複数のツールを同時にパッケージ化することが可能です。 単一のyxiファイルに複数のツールを入れる主な理由としては、対になるような組み合わせがあったり、複数のツールを順に使っていくような場合でしょう。 何らかのデータソースにアクセスするツールであれば入力ツールと出力ツールが対になったりするでしょうし、機械学習系であれば学習と推論のツールが対になっていたりするでしょう。 また、Intelligence Suiteに含まれるAssisted Modelingのように複数のツールを組み合わせて使うことを想定したものもあります(なお、yxiファイルに同時に含めるツールに関しては特に制限はありませんので、ツール詰め合わせパックとして使うこともできます)。
こういった際には、対応するすべてのツールでライブラリのバージョンをそろえておくなどの管理をする際に、すべてのツールのrequrements.txtを書き直す必要がなくなります。 これによって、依存ライブラリに破壊的変更が加わっているのに、一部のツールのみバージョン指定を書き換え忘れたなどを防ぐことが可能になります。
おわりに
今回は、AlteryxのPython SDKにおけるToolFamily属性について解説しました。 「せっかくだから俺はPython SDKを選ぶぜ」派の方はぜひこちらの設定も使ってみてください。